// const nums = [1, 2, 3, 4, 5, 6]; // 21

// let sum = 0;
// for (const num of nums) {
//     sum += num;
// }
// console.log(sum);

// // es2017
// // prev：上一轮回调函数返回的值
// const res = nums.reduce(function (prev, current) {
//     return prev + current;
// }, 10);

// console.log(res);

// const arr = ['I', 'am', 'spider', 'man'];
// // const res = arr.reduce(function (prev, current) {
// //     return `${prev} ${current}`;
// // }, '');
// // console.log(res);

// const params = [
//     ['name', 'zhangsan'],
//     ['age', '18'],
//     ['sex', '男'],
// ];

// // const expect = 'name=zhangsan&age=18&sex=男';
// const res = params.reduce(function (prev, current) { // ['name', 'zhangsan']
//     console.log(prev);
//     // 'name=zhangsan'  'age=18'   'sex=男'
//     const tmp = current.join('='); // 'name=zhangsan'
//     return `${prev}${!prev ? '' : '&'}${tmp}`;
// }, '');

// console.log(res);

// console.log(arr.join('+'));

// const params = [
//     ['name', 'zhangsan'], // 'name=zhangsan'
//     ['age', '18'],
//     ['sex', '男'],
// ];

// const res = params
//     .map(function (item) {
//         return item.join('=');
//     })
//     .join('&');


// const params = [
//     ['name', 'zhangsan'],
//     ['age', '18'],
//     ['sex', '男'],
// ];

// // const res = [
// //     'name',
// //     'zhangsan',
// //     'age',
// //     '18',
// //     'sex',
// //     '男',
// // ];

// // const result = [];
// // for (const param of params) {
// //     // param: ['name', 'zhangsan']
// //     for (const item of param) {
// //         result.push(item);
// //     }
// // }

// const res = params.flat();
// console.log(res);

// const nums = [1, 2, [1, 2], [2, [2, 3, [2, [4231, 1]]]]];

// console.log(nums.flat(Infinity));

// prev: 上一轮返回的值
// current: 当前数组项
function fn (prev, current) {
    return prev + current;
}

Array.prototype.myReduce = function (getNext, initValue) {
    for (const item of this) { // item: 数组项
        initValue = getNext(initValue, item);
    }
    return initValue;
};

// const arr = [1, 2, 3, 4];
// console.log(arr.myReduce(fn), 0); // 10

const str = 'name=zhangsan&age=18&sex=男';
// 1. ['name=zhangsan', 'age=18', 'sex=男']
const res = str.split('&').myReduce((prev, current) => {
    // current: 'age=18'
    // prev: { name: 'zhangsan' }
    const arr = current.split('=');
    const key = arr[0];
    const value = arr[1];

    prev[key] = value;
    return prev;
}, {});

console.log(res);

